가상 메모리
연속 메모리 할당
- 연속 메모리 할당: 프로세스에 연속적인 메모리 공간을 할당하는 방시
- 스와핑: 메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스를 메모리로 들여보내는 메모리 관리 기법
- 스왑영역: 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
- 스왑 아웃: 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인: 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 최초 적합 방식: 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식
- 최적 적합 방식: 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식
- 최악 적합 방식: 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식
- 외부 단편화: 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상
- 해결방법
압축: 메모리 내에 저장된 프로세스를 재배치시켜 흩어져 있는 작은 빈 공간들을 하나의 큰 빈 공간으로 만드는 방법
→ 하나로 모으는 동 안 시스템은 하던 일을 중지해야 하고 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기하며 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 결정하기 어렵다.
- 해결방법
페이징을 통한 가상 메모리 관리
-
연속 메모리 할당의 문제점
- 외부 단편화
- 물리 메모리보다 큰 프로세스를 실행할 수 없다.
→ 가상 메모리 - 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
크게 페이징과 세그멘테이션이 있지만 현대 대부분의 운영체제가 사용하는 방법은 페이징 기법이다. 이를 이용하면 물리 메모리보다 큰 프로세스를 실행할 수 있으며 외부 단편화 문제도 해결 가능하다.
- 외부 단편화
-
페이징: 물리 주소 공간을 프레임 단위로 자르고 프로세스의 논리 주소 공간을 페이지 단위로 자른 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법
-
프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU는 이를 순차적으로 실행할 수 없다. 즉, ‘다음에 실행할 명령어 위치를 찾기가 어려워진다. 이를 해결하기 위해 페이징 시스템은 CPU가 바라보는 주소인 논리 주소에는 연속적으로 배치되도록 페이지 테이블을 이용한 다.
-
페이지 테이블을 통해 페이지가 적재된 프레임을 찾을 수 있다.
-
프로세스마다 각자의 프로세스 테이블이 있으며 각 페이지 테이블 정보들은 프로세스의 PCB에 기록된다.
-
프로세스의 페이지 테이블들은 메모리에 적재되어 있다.
-
페이지 테이블에는 페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 접근 비트, 수정 비트 등에 대한 정보가 있다.
- 유효 비트: 현재 해당 페이지에 접근 가능한지 여부를 알려주는 비트, 페이지가 메모리에 적재되어 있지 않으면 페이지 폴트 발생
- 보호 비트: 페이지에 접근할 권한을 제한하여 페이지를 보호하는 비트 (r - read, w - write, x - execute)
- 참조 비트: 페이지에 접근한 적이 있는지 나타내는 비트
- 수정 비트: 해당 페이지가 수정된 적이 있는지 나타내는 비트
-
-
PTBR: 각 프로세스의 페이지 테이블이 적재된 주소를 가리킨다.
-
페이지 테이블을 메모리에 두기 때문에 메모리 접근 시간이 두배로 늘어난다는 문제가 있다.
- 메모리에 있는 페이지 테이블을 보기 위해 한번, 그렇게 알게 된 프레임에 접근하기 위해 한번
- 이를 해결하기 위해 TLB 사용
-
TLB: 페이지 테이블의 캐시 메모리 역할을 수행하기 위해 페이지 테이블의 일부를 저장한다.
- 주로 최근에 사용된 페이지 위주로 가져와 저장한다.
- CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우 TLB 히트라고 한다.
- 반대는 TLB 미스
-
하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있다. 따라서 특정 주소에 접근하려면 아래 두 정보가 필요하다.
- 어떤 페이지 혹은 프레임에 접근하고 싶은지 (페이지 번호)
- 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지 (변위)
즉, 논리 주소 (페이지 번호, 변위)는 페이지 테이블을 통해 물리 주소 (프레임 번호, 변호)로 변환된다.

-
페이지 테이블 엔트리: 페이지 테이블의 각 행들
페이지 교체와 프레임 할당
-
가상 메모리를 통해 큰 프로세스도 실행할 수 있다고는 하지만 여전히 물리 메모리의 크기는 한정되어 있다. 운영체제는 프로세스들이 한정된 메모리를 효율적으로 이용할 수 있도록 기존에 메모리에 적재된 불필요한 페이지를 선별해 보조기억장치로 내보낼 수 있어야 하고, 프로세스들에 적절한 수의 프레임을 할당하여 페이지를 할당할 수 있게 해야 한다.
-
요구 페이징: 페이지가 필요할 때만 메모리에 적재하는 기법
→ 위와 같은 요구 페이징 시스템이 안정적으로 작동하려면 페이지 교체와 프레임 할당을 해결해야 한다.
-
페이징 교체 알고리즘: 쫓아낼 페이지를 결정하는 방법
- FIFO 알고리즘: 적재된 페이지 순서대로 교체하는 알고리즘
- 최적 알고리즘: 앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘 → 가장 낮은 페이지 폴트율을 보장하지만 예측하기가 어려우기 땜문에 실제 구현이 힘듬
- LRU 페이지 교체 알고리즘: 가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘
-
스래싱: 지나치게 빈번한 페이지 교체로 인해 CPU 이용률이 낮아지는 문제. 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제
→ 운영체제는 각 프로세스들이 무리 없이 실행하기 위한 최소한의 프레임 수를 파악하고 프로세스들에 적절한 수만큼 프레임을 할당해 줄 수 있어야 한다.
-
프레임 할당 방식
- 균등 할당 (정적): 모든 프로세스에 균등하게 프레임을 제공
- 비례 할당 (정적): 프로세스 크기에 따라 프레임을 배분하는 방식
- 작업 집합 모델 기반 프레임 할당 (동적): 작업 집합(실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합)의 크기만큼만 프레임을 할당하는 방식
- 페이지 포트율 기반 프레임 할당 (동적): 페이지 폴트율에 상한성과 하한선을 정하고 그 내부 범위 안에서만 프레임을 할당하는 방식